package br.com.fiap.atividade5.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import br.com.fiap.atividade5.entity.Pedido;
import br.com.fiap.atividade5.entity.PedidoProduto;
import br.com.fiap.atividade5.entity.Produto;

public class PedidoProdutoDAO extends GenericDAO<PedidoProduto> {
	
	private ProdutoDAO produtoDAO = new ProdutoDAO();

	@Override
	protected PreparedStatement doGetByIdyStatement(Long id)
			throws SQLException {

		PreparedStatement st = getConnection().prepareStatement("SELECT * FROM PEDIDO_PRODUTO WHERE CODIGO = ?");
		st.setLong(1, id);
		
		return st;

	}

	@Override
	protected PreparedStatement doInsertStatement(PedidoProduto entity) throws SQLException {
		
		PreparedStatement st = getConnection().prepareStatement("INSERT INTO PEDIDO_PRODUTO (NUM_PEDIDO,COD_PRODUTO,QUANTIDADE,DESCONTO,TOTAL) VALUES (?,?,?,?,?)");

		st.setLong(1, entity.getPedido().getNumeroPedido());
		st.setLong(2, entity.getProduto().getCodigo());
		st.setLong(3, entity.getQuantidade());
		st.setBigDecimal(4, entity.getDesconto());
		st.setBigDecimal(5, entity.getTotal());
		
		return st;
	}

	@Override
	protected PreparedStatement doUpdateStatement(PedidoProduto entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PreparedStatement doDeleteStatement(PedidoProduto entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PedidoProduto createEntityByResultSet(ResultSet rs)
			throws SQLException {
		
		PedidoProduto pedidoProduto = new PedidoProduto();
		
		pedidoProduto.setCodigo(rs.getLong("CODIGO"));
		
		try {
			Long codigoProduto = rs.getLong("COD_PRODUTO");
			Produto produto;
			produto = produtoDAO.searchById(codigoProduto);
			pedidoProduto.setProduto(produto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		Pedido pedido = new Pedido();
		pedido.setNumeroPedido(rs.getLong("NUM_PEDIDO"));
		pedidoProduto.setPedido(pedido);
		
		pedidoProduto.setQuantidade(rs.getLong("QUANTIDADE"));
		pedidoProduto.setDesconto(rs.getBigDecimal("DESCONTO"));
		pedidoProduto.setTotal(rs.getBigDecimal("TOTAL"));
		
		return pedidoProduto;
		
	}
	
	public final List<PedidoProduto> listProdutosByPedido(String numeroPedido) throws Exception {
		
		List<PedidoProduto> pedidoProdutos = new LinkedList<PedidoProduto>();
		
		try {
			
			abreConexao();
			
			PreparedStatement st = getConnection().prepareStatement("SELECT * FROM PEDIDO_PRODUTO WHERE NUM_PEDIDO = ?");
			
			st.setString(1, numeroPedido);
			
			ResultSet result = st.executeQuery();
			
			while (result.next()) {
				PedidoProduto entity = this.createEntityByResultSet(result);
				pedidoProdutos.add(entity);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			fechaConexao();
		}
		
		return pedidoProdutos;
	}

}
